#!/bin/bash

# 定义变量
CONTAINER_NAME=we-lightning-postgis
CONTAINER_USER=postgres
RESTORE_PATH=maindb.tar
HOST_RESTORE_PATH=./backup/maindb.tar
DATABASE_NAME=maindb


# 检查备份文件是否存在
if [ ! -f "$HOST_RESTORE_PATH" ]; then
  echo "备份文件不存在！无法恢复数据库。"
  exit 1
fi

# 关闭正在运行的数据库连接
docker exec -t $CONTAINER_NAME psql -U $CONTAINER_USER -d $DATABASE_NAME -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DATABASE_NAME';"

# 删除现有数据库（如果存在）
docker exec -t $CONTAINER_NAME dropdb -U $CONTAINER_USER $DATABASE_NAME

# 创建新的、空的数据库
docker exec -t $CONTAINER_NAME createdb -U $CONTAINER_USER $DATABASE_NAME

# 将备份文件从容器外部复制到容器内部
docker cp $HOST_RESTORE_PATH $CONTAINER_NAME:$RESTORE_PATH

# 恢复数据库
docker exec -t $CONTAINER_NAME pg_restore -U $CONTAINER_USER -d $DATABASE_NAME -C $RESTORE_PATH

# 删除容器内的备份文件
docker exec -t $CONTAINER_NAME rm $RESTORE_PATH

# 检查恢复后的指定数据库表数量
TABLE_COUNT=$(docker exec -t $CONTAINER_NAME psql -U $CONTAINER_USER -d $DATABASE_NAME -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';")

# 输出表数量
echo "恢复完成！指定数据库中的表数量为: $TABLE_COUNT"